#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <map>
#include <climits>

using namespace std;

int main()
{
    int m, n, L;
    cin >> m >> n >> L;
    vector<int> s(n), v(n);
    if (L == m)
    {
        cout << 0.00 << endl;
        return 0;
    }
    for (int i = 0; i < n; i++)
    {
        cin >> s[i];
    }
    for (int i = 0; i < n; i++)
    {
        cin >> v[i];
    }
    auto calcTime = [&](int x, int y) -> double
    {
        int d1 = s[x] - s[y];
        double dd1 = double(abs(s[x] - s[y]));
        if (2 * m - abs(d1) <= L || abs(d1) <= L)
            return 0.0;

        int d2 = (s[x] + m) % (2 * m) - s[y];
        double dd2 = abs(d2);

        if (2 * m - abs(d2) <= L || abs(d2) <= L)
            return 0.0;
        double res = 1e20;
        double vv = double(abs(v[x] - v[y]));
        if (v[x] > v[y])
        {
            if (d1 < 0)
                res = min(1.0 * (dd1 - L) / vv, res);
            else
                res = min(1.0 * ((2 * m - dd1) - L) / vv, res);
            if (d2 < 0)
                res = min(1.0 * (dd2 - L) / vv, res);
            else
                res = min(1.0 * ((2 * m - dd2) - L) / vv, res);
        }
        else
        {
            if (d1 > 0)
                res = min(1.0 * (dd1 - L) / vv, res);
            else
                res = min(1.0 * ((2 * m - dd1) - L) / vv, res);
            if (d2 > 0)
                res = min(1.0 * (dd2 - L) / vv, res);
            else
                res = min(1.0 * ((2 * m - dd2) - L) / vv, res);
        }
        return res;
    };
    double ans = 0;
    for (int i = 1; i < n; i++)
    {
        ans = max(ans, calcTime(0, i));
    }
    printf("%.2f\n", ans );
    return 0;
}